package com.yidu.ladder.base.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yidu.ladder.base.dao.RoleDao;
import com.yidu.ladder.base.domain.Role;
import com.yidu.ladder.base.domain.RoleVo;
import com.yidu.ladder.base.domain.Subset;
import com.yidu.ladder.base.service.RoleService;

/**
 * 角色业务逻辑接口实现类
 * 
 * @author yy
 * @since 2019-12-2
 *
 */
@Service
public class RoleServiceImpl implements RoleService {

	/**
	 * 关联角色数据访问层
	 */
	@Autowired
	private RoleDao roleDao;

	public RoleDao getRoleDao() {
		return roleDao;
	}

	public void setRoleDao(RoleDao roleDao) {
		this.roleDao = roleDao;
	}

	/**
	 * 查询角色
	 */
	@Override
	public Map<String, Object> queryRoleByCriteriaWithPage(RoleVo roleVo) {
		// 计算分页
		int page = (roleVo.getPage() - 1) * roleVo.getLimit();
		roleVo.setPage(page);
		// 查询满足检索条件的用户
		List<RoleVo> roleList = roleDao.queryRoleByCriteriaWithPage(roleVo);
		// 统计用户总数
		Integer total = roleDao.countRoleByCriteria(roleVo);
		// 创建返回结果映射: {"total":"用户总数",rows:"指定页面的用户集合"}
		Map<String, Object> returnMap = new HashMap<String, Object>();
		// 封装数据到结果映射中
		returnMap.put("code", 0);
		returnMap.put("msg", "");
		returnMap.put("count", total);
		returnMap.put("data", roleList);
		return returnMap;
	}

	/**
	 * 添加角色
	 */
	@Override
	public int addRole(Role role) {
		//调用添加角色方法
		return roleDao.addRole(role);
	}

	/**
	 * 修改角色
	 */
	@Override
	public boolean updateRole(Role role) {
		//调用修改角色方法
		return roleDao.updateRole(role) == 1 ? true : false;
	}

	/**
	 * 冻结或还原角色
	 */
	@Override
	public boolean frozenOrRecoveRole(String roleId, String useable) {
		String[] roleIdArr = roleId.split(",");
		int totle = 0;
		for (String rId : roleIdArr) {
			// 创建角色对象
			Role role = new Role();
			// 赋值
			role.setRoleId(rId);
			role.setUseable(useable);
			// 调用修改角色方法
			int result = roleDao.updateRole(role);
			if (result == 1) {
				totle++;
			}
		}
		return totle == roleIdArr.length ? true : false;
	}

	/**
	 * 给下拉框赋值
	 */
	@Override
	public List<Subset> selectAllSubset() {
		return roleDao.selectAllSubset();
	}
}
